package org.ws.task.item;

import org.ws.task.listener.RegisterListener;
import org.ws.task.listener.item.TaskItemListener;
import org.ws.task.model.protocol.CommitResponse;
import org.ws.task.model.TaskItem;

import java.util.List;
import java.util.function.Consumer;

/**
 * 任务
 */
public interface Task extends RegisterListener<TaskItemListener> {

    /**
     * 名称：唯一标识，不可重复
     * @return
     */
    String name();

    /**
     * 启动任务：加载后自动启动
     */
    void start(RemoteAccessApi remoteAccessApi);

    /**
     * 停止任务
     */
    void shutdown();

    /**
     * 同步提交处理状态
     * @param items
     */
    CommitResponse commitSync(List<TaskItem> items, long timeout);

    /**
     * 异步提交处理状态
     * @param items
     */
    void commitAsync(List<TaskItem> items,long timeout, Consumer<CommitResponse> callback);
}
